<?php
/**
 * Message
 *
 * Обработка данных переписки
 * 
 */
class Message extends ActiveRecord {
	
	protected $tableName = 'message';
	public $pkName = 'ID_message';
	public $essenceNumberOnPage = 3;			// Количество отображаемых сообщений на одной странице
	protected $arrSettings = array(
			'created_at' => true,  // в БД храним время создания
			'author' => true			// в БД храним автора (ID_user)
	);
	public $validatesLengthOf = array(
	  'text' => array('minimum' => 1, 'message' => 'Пустое сообщение нельзя отправить'));
	
	/**
	 * (non-PHPdoc)
	 * @see ActiveRecord::beforeValidation()
	 */
	public function beforeValidation() {
	}
	
	/**
	 * Метод возвращает массив последних, уникальных по собеседнику сообщений пользователя(для страницы ../messages ) 
	 * @return array
	 */
	public function getArrMessages() {
		Service_Debug::setDebug();
		$objDB = Service_Database::instance();
		
		$currentUserId = User_User::getId();
		$stmt = "SELECT `user`.`first_name`,`user`.`last_name`,`user`.`user_type`,`user`.`ID_user`, `temptable`.`text`,`temptable`.`created_at`,`temptable`.`is_read_at`,`temptable`.`ID_user_to`
			     FROM `user` 
 				 RIGHT JOIN (
 							SELECT `message`.*
    						FROM `message`
    						WHERE (`message`.`ID_user`='" . $currentUserId . "' AND `message`.`deleted_by_user` IS NULL) OR (`message`.`ID_user_to`='" . $currentUserId . "' AND `message`.`deleted_by_userto` IS NULL)
    						ORDER BY `message`.`created_at` DESC
    					   )temptable
 				ON (`user`.ID_user = `temptable`.`ID_user`) OR (`user`.ID_user = `temptable`.`ID_user_to`)
 				WHERE `user`.`ID_user` IN (
 											SELECT `ID_user`
											FROM `message`
											WHERE `ID_user_to`='" . $currentUserId . "'
											UNION
											SELECT `ID_user_to` 
											FROM `message`
											WHERE `ID_user`='" . $currentUserId . "'
										  )
 				GROUP BY `user`.`ID_user`
				ORDER BY 6 DESC";
		$lastMessagesArr =  $objDB->select($stmt); 
		return $lastMessagesArr;
	}
	
	/**
	 * Функция отмечает сообщение, как прочитанное
	 */
	public  function makeRead() {
		Service_Debug::setDebug();
		$this->updateField('is_read_at', gmdate("Y-m-d H:i:s"));
		User_User::changeNumber('-', 'message', $this->getField('ID_user_to'));
	}
	
	public function afterSave() {
		// Увеличиваем счётчик новых сообщений у пользователя кому отправлено текущее сообщение
		User_User::changeNumber('+','message', $this->getField('ID_user_to'));
	}
}
?>